import time
from machine import UART
from machine import FPIOA

# 配置引脚GPIO_11,GPIO12
fpioa = FPIOA()
fpioa.set_function(11, FPIOA.UART2_TXD)
fpioa.set_function(12, FPIOA.UART2_RXD)

baud = 9600

# 初始化UART2，波特率115200，8位数据位，无校验，1位停止位
uart = UART(UART.UART2, baudrate = baud, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE)

data1 = bytearray([0xFF, 11, 22, 33, 44, 55, 0xFE])
uart.write(data1)

# 要测试的消息
test_message = [0xFF, 11, 22, 33, 44, 55, 0xFE]
#b'UART Loopback Test!'
## 发送数据
#uart.write(test_message)

# 等待数据发送和接收（根据波特率和数据长度，调整延时）
time.sleep(0.1)

# 如果接收不到数据就一直尝试读取
#received_data = b''

received_data = uart.read(1)


#这两行数据在本质上代表的是相同的字节序列，但它们的表示方式不同。
#第一行数据
#每个以 \x 开头的字符代表一个十六进制字节值：
#\xff 表示字节值 255（十六进制 FF）
#\x0b 表示字节值 11（十六进制 0B）
#\x16 表示字节值 22（十六进制 16）
#! 的 ASCII 值是 33（十六进制 21）
#, 的 ASCII 值是 44（十六进制 2C）
#7 的 ASCII 值是 55（十六进制 37）
#\xfe 表示字节值 254（十六进制 FE）
#b'\xff\x0b\x16!,7\xfe' 对应的字节值序列是：255, 11, 22, 33, 44, 55, 254
#第二行数据
#0xFF 是十六进制表示的 255
#11 是十进制表示的 11
#22 是十进制表示的 22
#33 是十进制表示的 33
#44 是十进制表示的 44
#55 是十进制表示的 55
#0xFE 是十六进制表示的 254

#两行数据都表示相同的字节序列：255, 11, 22, 33, 44, 55, 254。第一行是 Python 的字节串表示法，第二行是整数列表表示法。
#python在接收到数据时会自动转为字符，所以32单片机可直接发送字符到python解释器
if received_data:
    received_message = received_data
    print("接收的数据是Received:", received_message)
    if received_message == test_message:
        print("数据一致Loopback Test Passed!")
    else:
        print("数据不一致Loopback Test Failed: Data Mismatch")
else:
    print("没有接收到数据Loopback Test Failed: No Data Received")

print("打印测试消息test_message is {}".format(test_message))
print("打印接收消息received_message is {}".format(received_message))

# 释放UART资源
uart.deinit()
